package com.github.dynamicextensionsalfresco.osgi.spring;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.context.ResourceLoaderAware;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.util.Assert;
/**
* Abstract base class for {@link FactoryBean}s that use configuration files.
*
* @author Laurens Fridael
*
* @param <T>
*/
public abstract class AbstractConfigurationFileFactoryBean<T> implements FactoryBean<T>, ResourceLoaderAware {
/* Dependencies */
private ResourcePatternResolver resourcePatternResolver;
/* Configuration */
private List<Resource> configurations = Collections.emptyList();
private List<String> configurationLocations = Collections.emptyList();
/* Dependencies */
@Override
public void setResourceLoader(final ResourceLoader resourceLoader) {
Assert.isInstanceOf(ResourcePatternResolver.class, resourceLoader);
this.resourcePatternResolver = (ResourcePatternResolver) resourceLoader;
}
protected ResourcePatternResolver getResourcePatternResolver() {
return resourcePatternResolver;
}
/* Utility operations */
protected List<Resource> resolveConfigurations() throws IOException {
final List<Resource> configurations = new ArrayList<Resource>(this.configurations);
for (final String location : getConfigurationLocations()) {
configurations.addAll(Arrays.asList(getResourcePatternResolver().getResources(location)));
}
return configurations;
}
/* Configuration */
public void setConfigurations(final List<Resource> configurations) {
Assert.notNull(configurations);
this.configurations = configurations;
}
protected List<Resource> getConfigurations() {
return configurations;
}
public void setConfigurationLocations(final List<String> configurationLocations) {
this.configurationLocations = configurationLocations;
}
protected List<String> getConfigurationLocations() {
return configurationLocations;
}
}